﻿// 用户单击的按钮
const LogonWindowButton = {
    CANCEL: 0,  // "取消"按钮
    OK: 1       // "确定"按钮
}

/**
 * 登录窗口类的构造方法。
 * @param callback  回调
 * @param parent    父窗口
 */
function LogonWindow(callback, parent) {
    const mBackground = document.getElementById("IDC_DIALOG_BACKGROUND")                // 灰色背景
    var mClickedButton = LogonWindowButton.CANCEL                                       // 用户点击的按钮
    const mDialog = document.getElementById("IDD_LOGON_WINDOW")                         // 对话框
    const mEditPassword = document.getElementById("IDC_LOGON_WINDOW_EDIT_PASSWORD")     // "密码"编辑框
    const mEditUsername = document.getElementById("IDC_LOGON_WINDOW_EDIT_USERNAME")     // "用户名"编辑框
    const mThis = this                                                                  // 自身

    // 设置"确定"按钮
    const buttonOK = document.getElementById("IDC_LOGON_WINDOW_BUTTON_OK")
    buttonOK.innerHTML = IDS_OK[LANG]
    buttonOK.onclick = onOK

    // 设置"取消"按钮
    const buttonCancel = document.getElementById("IDC_LOGON_WINDOW_BUTTON_CANCEL")
    buttonCancel.innerHTML = IDS_CANCEL[LANG]
    buttonCancel.onclick = onCancel

    // 设置"用户名"编辑框
    mEditUsername.maxlength = Const.MAX_USERNAME_LEN
    mEditUsername.placeholder = IDS_USERNAME[LANG]
    mEditUsername.value = ""

    // 设置"密码"编辑框
    mEditPassword.maxlength = Const.MAX_PASSWORD_LEN
    mEditPassword.placeholder = IDS_PASSWORD[LANG]
    mEditPassword.value = ""

    // 计算窗口位置
    mDialog.style.display = "block"
    mDialog.style.left = (parent.clientWidth - mDialog.clientWidth) / 2.0 + "px"
    mDialog.style.top = (parent.clientHeight - mDialog.clientHeight) / 2.0 + "px"
    mDialog.style.zIndex = 999999

    // "用户名"编辑框获得焦点
    mEditUsername.focus()

    // 显示背景
    mBackground.style.display = "block"

    /**
     * 关闭对话框。
     * @param clickedButton 单击的按钮
     */
    function close(clickedButton) {
        // 关闭
        mClickedButton = clickedButton
        mBackground.style.display = "none"
        mDialog.style.display = "none"

        // 调用回调
        if (callback) {
            callback(mThis)
        }
    }

    /**
     * 获取单击的按钮。
     * @return 单击的按钮
     */
    this.getClickedButton = function() {
        return mClickedButton
    }

    /**
     * 获取密码。
     * @return 密码
     */
    this.getPassword = function() {
        return mEditPassword.value
    }

    /**
     * 获取用户名。
     * @return 用户名
     */
    this.getUsername = function() {
        return mEditUsername.value
    }

    /**
     * "取消"按钮的单击响应方法。
     */
    function onCancel() {
        // 关闭窗口
        close(LogonWindowButton.CANCEL)
    }

    /**
     * "确定"按钮的单击响应方法。
     */
    function onOK() {
        // 检查用户名是否为空
        if (mEditUsername.value == "") {
            toast(parent, IDS_USERNAME_EMPTY[LANG])
            mEditUsername.focus()
            return 
        }

        // 检查密码是否为空
        if (mEditPassword.value == "") {
            toast(parent, IDS_PASSWORD_EMPTY[LANG])
            mEditPassword.focus()
            return 
        }

        // 关闭窗口
        close(LogonWindowButton.OK)
    }
}
